﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Ink;

namespace RozpoznawanieCore.KsztaltyFolder
{
    class Kreska : Ksztalt
    {
      override  public Ksztalt dolaczDoMnie(Ksztalt ks)
        {
            
            if (ks is Kreska)
            {Kreska kk=(Kreska)ks;
            if (orientacja == kk.orientacja)
            {

                if (Math.Abs(x2 - kk.x1) < Dlugosc * 0.1)
                {
                    x2 = kk.x2;
                    y2 = kk.y2;
                    Console.WriteLine("lacze kreski");
                    strokeCol.Add(ks.strokeCol);
                    return this;
                }
                else return null;
            }
            if (kk is KreskaProsta && this is KreskaProsta)
            {
                Ksztalt k=((KreskaProsta)this).zrobKat((KreskaProsta)kk);
               if(k!=null)
                return k;
               k = ((KreskaProsta)this).zrobPlus((KreskaProsta)kk);
               return k;

            }

            if (kk is KreskaSkosna && this is KreskaSkosna)
            {
              
               Ksztalt k = ((KreskaSkosna)this).zrobX((KreskaSkosna)kk);
                return k;

            }

                
            }
            return null;
        }

       

        public double Dlugosc
        {
            get
            {
                return Math.Sqrt
                (Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, (double)2));
            }
        }
        private static double maxRozstrzelenie = 0.2;
        private static bool czyZaDuzaRoznica(double roznica, double dlugosc)
        {
            if (dlugosc * maxRozstrzelenie < roznica) return true; else return false;
        }
        public static Kreska zwrocKreske(Stroke s)
        {
            double roznicaX = Math.Abs((s.StylusPoints[0].X - s.StylusPoints[s.StylusPoints.Count - 1].X));
            double roznicaY = Math.Abs((s.StylusPoints[0].Y - s.StylusPoints[s.StylusPoints.Count - 1].Y));
            double dlugosc = Math.Sqrt
                (Math.Pow(s.StylusPoints[0].X - s.StylusPoints[s.StylusPoints.Count - 1].X, 2) + Math.Pow(s.StylusPoints[0].Y - s.StylusPoints[s.StylusPoints.Count - 1].Y, (double)2));
            bool czyZaDuzyX = czyZaDuzaRoznica(roznicaX, dlugosc);
            bool czyZaDuzyY = czyZaDuzaRoznica(roznicaY, dlugosc);
            Console.WriteLine("X " + roznicaX + " " + dlugosc + " " + czyZaDuzyX);
            Console.WriteLine("Y " + roznicaY + " " + dlugosc + " " + czyZaDuzyY);
            if (czyZaDuzyX && czyZaDuzyY)
            {
                return new KreskaSkosna(s);
            }
            if (czyZaDuzyX)
            {
                return new KreskaProsta(s, KreskaProsta.POZIOMA);

            }
            else return new KreskaProsta(s, KreskaProsta.PIONOWA);
        }
    }
}
